package br.com.iswe.core.dao.hibernate;

import java.util.HashMap;
import java.util.Map;

import org.hibernate.Criteria;

public class CriteriaWrapper {

	protected Criteria criteria;
	protected Map<String, CriteriaWrapper> cacheSubCriteria = new HashMap<String, CriteriaWrapper>();
	
	public CriteriaWrapper(Criteria criteria) {
		this.criteria = criteria;
	}

	public CriteriaWrapper getSubCriteria(String propertyName, int joinType) {
		//Primeiro verifica se ja nai existe a criteria no cache
		CriteriaWrapper subCriteria = cacheSubCriteria.get(propertyName);
		if(subCriteria == null){
			subCriteria = new CriteriaWrapper(criteria.createCriteria(propertyName, joinType));
			cacheSubCriteria.put(propertyName, subCriteria);
		}
		return subCriteria;
	}
	
	public CriteriaWrapper getSubCriteria(String propertyName) {
		//Primeiro verifica se ja nai existe a criteria no cache
		CriteriaWrapper subCriteria = cacheSubCriteria.get(propertyName);
		if(subCriteria == null){
			subCriteria = new CriteriaWrapper(criteria.createCriteria(propertyName));
			cacheSubCriteria.put(propertyName, subCriteria);
		}
		return subCriteria;
	}

	public Criteria getCriteria() {
		return criteria;
	}

}
